什么是 Jupyter Notebook?#
简介#
Jupyter Notebook 是一个交互式计算环境,它使用户能够创建包含以下内容的 notebook 文档:
实时代码
交互式小部件
图表
叙述性文本
方程式
图片
视频
这些文档提供了一次计算的完整且自包含的记录,可以转换为各种格式,并通过电子邮件、Dropbox、版本控制系统(如 git/GitHub)或 nbviewer.jupyter.org 与他人共享。
组件#
Jupyter Notebook 结合了三个组件:
Notebook Web 应用程序:一个交互式的 Web 应用程序,用于交互式地编写和运行代码,以及创作 notebook 文档。
内核:由 notebook Web 应用程序启动的独立进程,它以给定的语言运行用户的代码,并将输出返回给 notebook Web 应用程序。内核还处理诸如交互式小部件的计算、制表符补全和内省等事务。
Notebook 文档:自包含的文档,其中包含了 notebook Web 应用程序中所有可见内容的表示,包括计算的输入和输出、叙述性文本、方程式、图像以及对象的富媒体表示。每个 notebook 文档都有自己的内核。
Notebook Web 应用程序#
Notebook Web 应用程序使用户能够:
内核#
通过 Jupyter 的内核和消息传递架构,Notebook 允许代码以一系列不同的编程语言运行。对于用户打开的每个 notebook 文档,Web 应用程序都会启动一个内核来运行该 notebook 的代码。每个内核都能运行单一编程语言的代码,并且有适用于以下语言的内核:
Python(ipython/ipython)
Julia (JuliaLang/IJulia.jl)
Ruby (minrk/iruby)
Haskell (gibiansky/IHaskell)
Scala (Bridgewater/scala-notebook)
node.js (https://gist.github.com/Carreau/4279371)
Go (takluyver/igo)
默认内核运行 Python 代码。Notebook 为用户提供了一种简单的方法来选择为给定的 notebook 使用哪个内核。
这些内核中的每一个都使用一种基于 ZeroMQ/WebSockets 的 JSON 消息协议与 notebook Web 应用程序和 Web 浏览器进行通信,该协议在这里有详细描述。大多数用户不需要了解这些细节,但理解“内核运行代码”这一点会有所帮助。
Notebook 文档#
Notebook 文档包含交互式会话的输入和输出,以及伴随代码但并非用于执行的叙述性文本。通过运行代码生成的富媒体输出,包括 HTML、图像、视频和图表,都被嵌入到 notebook 中,这使其成为一次计算的完整且自包含的记录。
当您在计算机上运行 notebook Web 应用程序时,notebook 文档只是本地文件系统上带有 .ipynb
扩展名的文件。这使您可以使用熟悉的工作流程来将您的 notebook 组织到文件夹中并与他人共享。
Notebook 由线性单元格序列组成。有三种基本的单元格类型:
代码单元格: 在内核中运行的实时代码的输入和输出
Markdown 单元格: 带有嵌入式 LaTeX 方程式的叙述性文本
原始单元格: 未经格式化的文本,在使用 nbconvert 将 notebook 转换为不同格式时,这些文本会被原封不动地包含进去
在内部,notebook 文档是 JSON 数据,其中的二进制值经过 base64 编码。这使得它们可以被任何编程语言以编程方式读取和操作。由于 JSON 是一种文本格式,因此 notebook 文档对版本控制很友好。
使用 Jupyter 的 nbconvert
工具,Notebook 可以被导出为不同的静态格式,包括 HTML、reStructeredText、LaTeX、PDF 和幻灯片(reveal.js)。
此外,任何可从公共 URL 或 GitHub 上获取的 notebook 文档都可以通过 nbviewer 共享。该服务从 URL 加载 notebook 文档,并将其渲染为静态网页。因此,生成的网页可以与他人共享,而他们无需安装 Jupyter Notebook。